package com.coder520.sync_learning.demo;

import javafx.stage.StageStyle;

import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

import static java.util.stream.Collectors.toList;

public class ThreadJoin {
    /**
     * join方法会使得当前的线程一直永远的等待下去，直到期间的另外线程被打断，或者join方法的线程执行结束，
     * 当然也可以使用join的两个重载的方法，指定到毫秒数，在指定的时间到达之后，当前线程也会推出阻塞状态
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        //定义两个线程保存在list中
        List<Thread> threads = IntStream.range(1, 3).mapToObj(ThreadJoin::create).collect(toList());

        //启动这个线程
        threads.forEach(Thread::start);

//      执行这两个线程啊中的join
        for (Thread thread : threads) {
            thread.join();
        }

        //main线程循环输出
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"#"+i);
            shortSleep();
        }


    }

    private static Thread create(int seq) {
        return new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "#" + i);
                shortSleep();
            }
        }, String.valueOf(seq));
    }

    private static void shortSleep() {
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
